/*
    This file is part of the substandard lisp implementation of Standard Lisp
    Copyright (C) 2011 Nicky Nickell

    substandard lisp is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

/*
    builtins related to errors as defined in section 3.8 of the
    The Standard Lisp Report
*/

function std_error(a, env) {
  var number = a[0];
  var mess = a[1];

  throw new lisp_error(ERROR_USER, number, mess);
}
builtins['error'] = new builtin_function(std_error, 2, false, [TYPE_INTEGER, CLASS_ANY], FTYPE_EXPR);

function std_errorset(a, env) {
  var u = a[0];
  var msgp = a[1];
  var tr = a[2];

  try {
    return evaluate(u, env);
  } catch(e) {
    if (type_check(e.type, ERROR_USER)) {
      if (msgp != NIL) {
        // print e.mess to stdout
      }
      env.variables.set('EMSG*', e.mess);
      return e.value;
    } else {
      throw e;
    }
  }
}
builtins['errorset'] = new builtin_function(std_errorset, 3, false, [CLASS_ANY, TYPE_BOOLEAN, TYPE_BOOLEAN], FTYPE_EXPR);
